
#ifndef RTDE_HASH_H
#define RTDE_HASH_H

#include "rtdebasedefine.h"
#include "rtde_uthash.h"
#include "cdrtdebasedefine.h"



#define MAX_INPUT_HASH  RTDE_MAX_INPUT_VAR
#define MAX_OUTPUT_HASH RTDE_MAX_OUTPUT_VAR
#define MAX_METHOD_HASH RTDE_MAX_METHODS
/* 输入变量哈希表结构 */
typedef struct input_hash {
    char key[RTDE_MAX_VARNAME]; // 对应rtde_varlist_t.varname
    int index;                  // 在input_vars数组中的位置
    UT_hash_handle hh;
} input_hash_t;

/* 输出变量哈希表结构 */
typedef struct output_hash {
    char key[RTDE_MAX_VARNAME]; // 对应rtde_varlist_t.varname 
    int index;                  // 在output_vars数组中的位置
    UT_hash_handle hh;
} output_hash_t;

/* 方法列表哈希表结构 */
typedef struct method_hash {
    char key[RTDE_MAX_METHOD_NAME]; // 对应rtde_method_list.methodname
    int index;                     // 在methods_list数组中的位置
    UT_hash_handle hh;
} method_hash_t;

// 哈希表类型
typedef enum { INPUT, OUTPUT, METHOD } HashType;

void build_input_hash(RtdeHandle rtdeHandle,int input_vars_num, const rtde_varlist_t input_vars[]);
void build_output_hash(RtdeHandle rtdeHandle,int output_vars_num, const rtde_varlist_t output_vars[]);
void build_method_hash(RtdeHandle rtdeHandle,int methods_num, const rtde_method_list_t methods_list[]);

void reset_all_hashes(RtdeHandle rtdeHandle);

int find_input_index(RtdeHandle rtdeHandle,const char *name);
int find_output_index(RtdeHandle rtdeHandle,const char *name);
int find_method_index(RtdeHandle rtdeHandle,const char *method);

int multi_find(RtdeHandle rtdeHandle,const char *names, HashType type, int* resurlt);

#endif /* RTDE_HASH_H */

